/*
 * EnrolladorLigero.h
 *
 *  Created on: 29/03/2012
 *      Author: El Ricky
 */

#ifndef ENROLLADORLIGERO_H_
#define ENROLLADORLIGERO_H_
#include "Enrollador.h"
#include <sys/types.h>
#include<iostream>

typedef struct {
	int diametro;
	float grosor;
	unsigned short ancho;
	unsigned short peso;
	float velocidadLinea;
}Mandril_t;

template <class tipo_Planchon>//Alto, Medio, Bajo carbono
class EnrolladorLigero : public Enrollador{
private:
	char* code;
	Mandril_t* mandril;

public:
	EnrolladorLigero(const char* name, const char* cod, Mandril_t* params);
	Rollo_t* Iniciar(tipo_Planchon *planchon);
	virtual void Detener();
	virtual void MostrarInformacion();
	virtual double Velocidad();

	virtual ~EnrolladorLigero();


};

template <class tipo_Planchon>
EnrolladorLigero<tipo_Planchon>::EnrolladorLigero(const char* name, const char* cod, Mandril_t* params)
	: Enrollador(name)
{
	//, code((char*)cod), mandril(params
}
//No se por que no compila esto

template <class tipo_Planchon> Rollo_t* EnrolladorLigero<tipo_Planchon>::Iniciar(tipo_Planchon* planchon){
	Rollo_t *myRollo = Enrollador::Iniciar(planchon);
	if(Enrollador::Operacion)
	{
		//esperar siguente evento temporizador
	}
	else
	{
		//regresar error
	}
	return myRollo;
}

template <class tipo_Planchon> void EnrolladorLigero<tipo_Planchon>::Detener(){
	Enrollador::Detener();
	std::cout << "Stop was called" << std::endl;
}

template <class tipo_Planchon> void EnrolladorLigero<tipo_Planchon>::MostrarInformacion(){
	std::cout<<"Codigo de Operacion: "<<this->code<<std::endl;
	std::cout<<"Ancho: "<<this->mandril->ancho<<std::endl;
	std::cout<<"Diametro: "<<this->mandril->diametro<<std::endl;
	std::cout<<"Grosor: "<<this->mandril->grosor<<std::endl;
	std::cout<<"Peso: "<<this->mandril->peso<<std::endl;
	std::cout<<"Velocidad de Linea: "<<this->mandril->velocidadLinea<<std::endl;
}

template <class tipo_Planchon> double EnrolladorLigero<tipo_Planchon>::Velocidad(){
	return (this->mandril->peso*Enrollador::Velocidad())/this->mandril->diametro;
}

template <class tipo_Planchon> EnrolladorLigero<tipo_Planchon>::~EnrolladorLigero(){
	free(code);
	free(mandril);
}


#endif /* ENROLLADORLIGERO_H_ */
